package com.sloth.controller;

import com.sloth.pojo.*;
import com.sloth.service.OrderDetailService;
import com.sloth.service.PlaceAnOrderService;
import com.sloth.util.ServerResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author lai
 * @time 2021/10/7 9:37
 */
@Controller
public class OrderDetailController {

    @Autowired
    private OrderDetailService orderDetailService;

    @Autowired
    private PlaceAnOrderService placeAnOrderService;

    // 同步请求
    // 从我的订单页面转到订单详情页面，传递的值是 订单详情id
    // 通过订单详情id查询该订单详情，
    // 通过该订单详情信息中的订单id查询订单收货地址id
    // 通过收货地址id查询 地址对象，
    // 通过订单id在流水表中查询该订单详情的支付时间，还有流水表中的 支付金额（仅是该订单详情中商品的金额）
    // 然后再通过查询到的订单详情表查询 该订单详情表中所包含的商品信息（商品价格）
    @GetMapping("/order/order_details/{orderDetailId}")
    @ResponseBody
    public ModelAndView orderDetail(@PathVariable("orderDetailId") Integer orderDetailId){
        System.out.println("哈哈");


        // 通过订单详情id查询该订单详情
        OrderDetails orderDetails = placeAnOrderService.getByOrderDetailsId(orderDetailId);
        System.out.println("订单详情页面中的订单详情记录： " + orderDetails);

        // 订单拿出来，在页面中渲染订单id
        Myorder myorder = placeAnOrderService.getMyOrderIdByOrderDetailId(orderDetails.getOrderId());

        // 商品信息根据订单详情中的商品id拿到
        Product product = placeAnOrderService.getProductByOrderDetailsProId(orderDetails.getProId());

        // 通过该订单详情信息中的订单id查询订单收货地址id，通过地址id在地址表中查询该订单的收货地址信息
        Address address = placeAnOrderService.getByOrderIdForAddress(orderDetails.getOrderId());
        System.out.println("订单详情页面中的地址信息记录： " + address);

        // 通过订单详情id在流水表中查询该订单详情的流水信息的支付金额（仅是该订单详情中商品的金额）
        Flow flow = placeAnOrderService.getFlowByOrderDetailId(orderDetails.getOdDetailsId());

//        ServerResponse serverResponse = orderDetailService.getByMyOrderIdAndProductId(myOrderId,productId);

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("myorder",myorder);  // 该包含该订单详情记录的订单信息
        modelAndView.addObject("address",address);  // 该订单详情的收货地址
        modelAndView.addObject("orderDetails",orderDetails);  // 订单详情信息
        modelAndView.addObject("product",product);  // 订单详情中包含的商品信息
        modelAndView.addObject("flow",flow);  // 订单详情对应的流水信息
        modelAndView.setViewName("/order/order_details");

        return modelAndView;
    }

    // 点击提交订单按钮，像后端传送相关的订单详情页面的信息，在数据库中增加记录
    /*@PostMapping
    public void saveOrderDetail(){

        OrderDetails orderDetails = new OrderDetails();

        boolean result = orderDetailService.saveOrderDetail(orderDetails);

    }*/

}